package tool

import (
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"gopkg.in/natefinch/lumberjack.v2"
	"os"
)

func NewLogger(filename string, debug bool) *zap.Logger {
	level := zap.NewAtomicLevel() // 新建一个日志水平对象
	if debug {                    // 设置日志水平
		//level.UnmarshalText([]byte("debug"))
		level.SetLevel(zapcore.DebugLevel)
	} else {
		level.SetLevel(zapcore.ErrorLevel)
	}

	// 新建日志内核，2个，
	cores := make([]zapcore.Core, 0, 2)
	je := zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()) //  生产环境日志，一般是输出到日志文件中
	//level  := zap.NewAtomicLevel()
	fw := zapcore.AddSync(&lumberjack.Logger{ // 设置日志文件的属性
		Filename:   filename,
		MaxSize:    50, // 单个文件最大50M
		MaxBackups: 3,  // 日志文件数量
		MaxAge:     3,  // 文件保留3天
	})
	cores = append(cores, zapcore.NewCore(je, fw, level))

	cw := zapcore.Lock(os.Stdout)                                      // 锁定控制台输出
	ce := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig()) // 开发环境日志，一般是将调试信息输出到控制条
	cores = append(cores, zapcore.NewCore(ce, cw, level))

	core := zapcore.NewTee(cores...)
	logger := zap.New(core)
	zap.ReplaceGlobals(logger)
	return logger
}
